import org.example.User;
import org.example.UserController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        //继承关系和功能⽅⾯来说：Spring 容器有两个顶级的接⼝：BeanFactory 和
        //ApplicationContext。其中 BeanFactory 提供了基础的访问容器的能⼒，⽽ ApplicationContext
        //属于 BeanFactory 的⼦类，它除了继承了 BeanFactory 的所有功能之外，它还拥有独特的特性，
        //还添加了对国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持。

        //从性能⽅⾯来说：ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象，⽽
        //BeanFactory 是需要那个才去加载那个，因此更加轻量(懒加载）
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
        //三种拿实例的方式
        //通过配置xml文件拿到user实例
//        User user=(User)context.getBean("User");
//        user.say();
//        User user1=(User)context.getBean(User.class);
//        user1.say();
//        User user2=(User)context.getBean("User",User.class);
//        user2.say();

        //通过注解拿到bean对象
        //这里默认的bean名字是类名小写首字母
        UserController controller=(UserController) context.getBean("userController");
        User user= controller.getUser();
        System.out.println(user.toString());

    }
}
